#include "fstring.hpp"
#include <sstream>
/**
	Constructeur de la classe
	Permet de créer un objet
	de type FString
*/
FString::FString() :
	std::string()
{

}

/**
	Constructeur de la classe
	Permet de créer un objet
	de type FString à partir d'une
	chaine de caractere
*/
FString::FString(const char *s) :
	std::string(s)
{

}

/**
	Methode qui permet de couper une
	chaine de caractere dans un
	tableau dynamique en deux parties
	Le separateur de type caractere
	est la partie referente pour le decoupage
	Cette methode retourne un vector contenant
	les différentes partie de la chaine coupée
*/
std::vector<FString> FString::split(char separator)
{
	std::vector<FString> parts;
	unsigned int i = 0;
	parts.push_back(FString());

	while(i < size())
	{
		if(data()[i] == separator)
		{
			parts.push_back(FString());
		}
		else
		{
			parts.back().push_back(data()[i]);
		}
		i++;
	}

	return parts;
}

/**
	Cette methode permet d'isoler la
	premiere partie d'un message
	qui contient la commande à executer
*/
FString FString::getCmd()
{
	return split(' ').at(0);
}

/**
	Cette methode permet de recuperer
	les arguments d'une requête
*/
FString FString::getArgs()
{
	FString args(data());

	while(args.size() && args.data()[0] != ' ')
	{
		args.erase(0, 1);
	}

	if(args.data()[0] == ' ')
		args.erase(0, 1); // efface espace

	return args;
}

/**
	[static]
	Cette methode permet de changer un entier
	en une chaine de caractère
*/
FString FString::fromInt(int i)
{
	std::stringstream ss;
	ss << i;
	FString str;
	ss >> str;
	return str;
}

/**
	[static]
	Cette methode permet de changer un float
	en une chaine de caractère
*/
FString FString::fromFloat(float i)
{
	std::stringstream ss;
	ss << i;
	FString str;
	ss >> str;
	return str;
}

/**
	Retourne la valeur entière représentée
	par la chaîne
*/
int FString::toInt()
{
	std::stringstream ss(this->data());
	int ret;
	ss >> ret;

	return ret;
}

void FString::removeChar(char c)
{
	for(unsigned int i=0; i<size(); i++)
	{
		if(data()[i] == c)
		{
			erase(1,i);
			i--;
			
		}
		
	}
	
}
